建立反圖 GT,在 GT 上 DFS 並記錄每個點離開的時間
依照離開時間大到小的順序在原圖 G 上 DFS 即可正確找出 SCC
若 A 可以走到 B,代表 B 裡面的所有點都要走完才會返回到 A
可以用 DAG 的例子來想像 Kosaraju 在做的事
dfs 一遍照離開順序由大到小
離開順序最大的點
反圖後這個點就變成出度 0 的點了,他走不到任何人,所以也就當成只會單純蒐集這一個點成一個強連通元件
所以我們只是在一直把反圖上出度 0 的點依序移除,你可以當成每個點其實就是一個強連通元件縮成一個點的樣子
假設
【Case 1】若在
若
【Case 2】若在
歸納所有 Case 1 的狀況,就能求出所有的強連通分輛,Case 2 則構成了完成縮點後的邊。最後這個證明還缺了一部分 : 這個演算法找出的強連通分量是最大的,此部分留給讀者思考。